package com.example.getfollowlist.service

import android.accessibilityservice.AccessibilityService
import android.content.Intent
import android.os.Handler
import android.os.Looper
import android.util.Log
import android.view.accessibility.AccessibilityEvent
import android.widget.Toast

/**
 * 自动点击服务类
 * 
 * 这是应用程序的核心服务类，负责协调和管理自动化操作。
 * 该服务通过Android的无障碍服务框架实现界面自动化操作。
 * 
 * 主要功能：
 * 1. 管理导航和列表获取两个阶段的任务
 * 2. 处理无障碍事件并分发给相应的任务处理器
 * 3. 协调任务之间的切换
 */
class AutoClickService : AccessibilityService() {
    // 服务运行状态标志
    private var isStarted = false
    private val handler = Handler(Looper.getMainLooper())
    
    // 任务处理器
    private lateinit var navigationTask: NavigationTask
    private lateinit var followListTask: FollowListTask
    
    // 当前执行阶段
    private var currentPhase = Phase.NAVIGATION

    /**
     * 服务执行阶段枚举
     */
    enum class Phase {
        NAVIGATION,    // 导航阶段：处理页面导航
        COLLECT_LIST   // 收集阶段：获取关注列表
    }

    companion object {
        // 服务启动的Action常量
        const val ACTION_START_SERVICE = "com.example.getfollowlist.START_SERVICE"
        private const val TAG = "GetFollowList"
    }

    /**
     * 服务连接时的回调
     * 初始化任务处理器并设置任务完成的回调
     *
     * 确保了任务的顺序执行：
     * 先完成导航任务（到达关注列表页面）
     * 然后才开始列表收集任务
     */
    override fun onServiceConnected() {
        super.onServiceConnected()
        // 初始化导航任务，并设置完成回调
        navigationTask = NavigationTask(this, handler) {
            Log.d(TAG, "导航任务完成，准备切换到列表采集阶段")
            // 导航完成后立即切换到列表收集阶段
            currentPhase = Phase.COLLECT_LIST
            Toast.makeText(this, "已到达关注页面", Toast.LENGTH_LONG).show()
            // 立即开始列表采集任务
            handler.post {
                Log.d(TAG, "开始执行列表采集任务")
                followListTask.start()
            }
        }
        // 初始化列表获取任务
        followListTask = FollowListTask(this, handler)
        Log.d(TAG, "无障碍服务已启动")
        Toast.makeText(this, "无障碍服务已启动", Toast.LENGTH_SHORT).show()
    }

    /**
     * 处理服务启动命令
     */
    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        if (intent?.action == ACTION_START_SERVICE) {
            Log.d(TAG, "收到启动命令")
            startTask()
        }
        return super.onStartCommand(intent, flags, startId)
    }

    /**
     * 处理无障碍事件
     * 根据当前阶段将事件分发给对应的任务处理器
     */
    override fun onAccessibilityEvent(event: AccessibilityEvent) {
        if (!isStarted) return

        val rootInActiveWindow = rootInActiveWindow ?: return

        when (currentPhase) {
            Phase.NAVIGATION -> navigationTask.handleEvent(event, rootInActiveWindow)
            Phase.COLLECT_LIST -> followListTask.handleEvent(event, rootInActiveWindow)
        }
    }

    /**
     * 处理服务中断
     */
    override fun onInterrupt() {
        Log.e(TAG, "服务被中断")
    }

    /**
     * 启动任务
     * 初始化状态并开始导航阶段
     */
    private fun startTask() {
        isStarted = true
        currentPhase = Phase.NAVIGATION
        navigationTask.start()
        Log.d(TAG, "开始自动点击流程")
    }
} 